db2数据库如何查看存储过程 如何查询db2存储过程内容

您所在的位置:网站首页 db2 查看存储过程内容 db2数据库如何查看存储过程 如何查询db2存储过程内容

db2数据库如何查看存储过程 如何查询db2存储过程内容

2024-07-13 11:08| 来源: 网络整理| 查看: 265

自身参与的一个项目里所负责的模块,在生产坏境中出现了性能原因,时不时就报查询超时。

分析了下主要有3个原因:

查询的表数据巨大。两张大表,一张是百万级,另一张是千万级。逻辑负责。有子查询,关联多张表,又要使用聚合函数对某些字段进行统计,最后还有排序。权限控制。直接在SQL中增加了权限控制的逻辑。

尽管接近全力做了优化,但效果甚微,最后在数据仓库同事的提议下,决定尝试使用存储过程,效果卓越,成功将查询时间控制在3s以下。

因此从网上中了下DB2存储过程的相关基础知识,记录下来,以备不时之需。

参数定义

DB2存储过程的参数分为两部分:输入、输出参数和性能相关参数。

输入、输出参数

表示方法:

输入参数用IN开头输出参数用OUT开头既是输入,又是输出参数则用INOUT开头

举个例子:

create procedure test{ IN var1 varchar(10), OUT var2 varchar(10), INOUT var3 varchar(10) } create procedure test{ IN var1 varchar(10), OUT var2 varchar(10), INOUT var3 varchar(10) }

性能相关参数

allowed-SQL

allowed-SQL字句指定了存储过程中是否使用SQL语句,如果使用,标明了其类型。

其类型:

NO SQL :表示存储过程不能执行SQL语句CONTAINS SQL:表示存储过程可以执行SQL语句,但不会读取SQL数据,也不会修改SQL数据READS SQL DATA:表示存储过程中不会包含修改数据的SQL,也就是说只从数据库中读取数据MODIFIES SQL DATA:表示存储过程可以执行任何SQL语句,即可以对数据进行增删改。

Note:默认值为MODIFIES SQL DATA。不同类型的存储过程效率是不同的,NO SQL最好,MODIFIES SQL DATA最差。

DYNAMIC RESULT SETS N

表示存储过程返回的结果集个数。

变量定义

存储过程使用DECLARE来定义变量,然后在后续程序中使用变量来处理逻辑。

例子:

DECLARE temp1 CHAR(10) DEFAULT 'yes'; DECLARE temp2 VARCHAR(10) DEFAULT 'no'; DECLARE temp3 SMALLINT DEFAULT 0; DECLARE temp4 INTEGER DEFAULT 10; DECLARE temp5 BIGINT DEFAULT 10000; DECLARE temp6 DECIMAL(10,2) DEFAULT 100.10; DECLARE temp7 REAL DEFAULT 10.1; DECLARE temp8 DOUBLE DEFAULT 10000.1001; DECLARE temp9 DATE DEFAULT '2014-08-23'; DECLARE temp10 TIME DEFAULT '1:50 PM'; DECLARE temp11 TIMESTAMP DEFAULT '2014-01-01-12.00.00'; DECLARE temp12 BLOB(2G); DECLARE temp13 CLOB(2G); DECLARE temp1 CHAR(10) DEFAULT 'yes'; DECLARE temp2 VARCHAR(10) DEFAULT 'no'; DECLARE temp3 SMALLINT DEFAULT 0; DECLARE temp4 INTEGER DEFAULT 10; DECLARE temp5 BIGINT DEFAULT 10000; DECLARE temp6 DECIMAL(10,2) DEFAULT 100.10; DECLARE temp7 REAL DEFAULT 10.1; DECLARE temp8 DOUBLE DEFAULT 10000.1001; DECLARE temp9 DATE DEFAULT '2014-08-23'; DECLARE temp10 TIME DEFAULT '1:50 PM'; DECLARE temp11 TIMESTAMP DEFAULT '2014-01-01-12.00.00'; DECLARE temp12 BLOB(2G); DECLARE temp13 CLOB(2G);

赋值语句

SET方法

SET money = 10

SET total = (SELECT COUNT(1) FROM TABLE1)

VALUE INTO方法

VALUE (100,200,300) INTO val1, val2, val3

SELECT INTO 方法

SLECT SUM(A) INTO val1 FROM TABLE2

游标

通过DECLARE cursor语句来定义一个游标,并提供其他语句来支持返回其他结果集和游标处理。

其申明语法

>>-DECLARE--cursor-name--CURSOR----------> >--FOR--+-select-statement-+------------->< .-WITHOUT HOLD-.--+--------------+---------------------------------------------| '-WITH HOLD----' .-WITHOUT RETURN-------------. |--+----------------------------+-------------------------------| | .-TO CALLER-. |'-WITH RETURN--+-----------+-'-TO CLIENT-' >>-DECLARE--cursor-name--CURSOR----------> >--FOR--+-select-statement-+------------->< .-WITHOUT HOLD-.--+--------------+---------------------------------------------| '-WITH HOLD----' .-WITHOUT RETURN-------------. |--+----------------------------+-------------------------------| | .-TO CALLER-. |'-WITH RETURN--+-----------+-'-TO CLIENT-'

select-statement是一条有效的SQL查询语句,可以指定FOR UPDATE 子句,以便将游标用于定位更新或删除。WITHOUT HOLD/WITH HOLD 选项定义 COMMIT 操作之后的游标状态(open/close)。默认情况下为WITHOUT HOLD。如果使用了WITH HOLD 选项定义一个游标,那么在COMMIT 操作之后,该游标保持OPEN 状态。在ROLLBACK 操作之后,所有游标都将被关闭。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3